package lb4;

/**
 * Created with IntelliJ IDEA.
 * User: Борис
 * Date: 30.10.13
 * Time: 23:11
 * To change this template use File | Settings | File Templates.
 */
public class LabFour {
    private double[] a;  //элементы матрицы на диагонали, которая находится под главной диагональю
    private double[] b;  //элементы матрицы на главной диагонали
    private double[] c;  //элементы матрицы на диагонали, которая находится над главной диагональю
    private double[] b1; //столбец свободных членов
    private double[] P;  //коэффициент прогонки
    private double[] Q;  //коэффициент прогонки
    private int n;       //индекс последнего элемента
    private int size;    //размер матрицы

//    public LabFour(double matrixOfSystem[][]){
//        size = matrixOfSystem.length;
//        this.n = size - 1;
//        a = new double[size];
//        b = new double[size];
//        c = new double[size];
//        P = new double[size];
//        Q = new double[size];
//        b1 = new double[size];
//        for(int i = 0; i<size; i++){
//            for(int j = 0; j<size; j++){
//                if(i==j) b[i] = matrixOfSystem[i][j];
//                if(i-j == -1) c[i] = matrixOfSystem[i][j];
//                if(i-j == 1) a[i] = matrixOfSystem[i][j];
//            }
//        }
//        for(int i = 0; i<size; i++)
//            b1[i] = matrixOfSystem[i][size];
//    }
    public LabFour(double[] a, double[] b, double[] c, double[] b1){
        this.a = a;
        this.b = b;
        this.c = c;
        this.b1 = b1;
        this.size = b.length;
        this.n = size - 1;
        P = new double[size];
        Q = new double[size];
    }
    // вычисляет коэффициенты прогонки
    private void pAndQ(){
        P[1] = -c[0]/b[0];
        Q[1] = b1[0]/b[0];
        for(int i = 1; i<=n-1; i++){
            P[i+1] = -c[i]/(a[i] * P[i] + b[i]);
            Q[i+1] = (b1[i] - a[i] * Q[i]) / (a[i] * P[i] + b[i]);
        }
    }
    // вычисляет неизвестные
    public double[] decisionSystem(){
        pAndQ();
        double[] Y = new double[size];
        Y[n] = (b1[n] - a[n] * Q[n]) / (a[n] * P[n] + b[n]);
        for(int i = n-1; i>=0; i--){
            Y[i] = P[i+1] * Y[i+1] + Q[i+1];
        }
        return Y;
    }
}
